package Ptolemaiosz;

public class WallPhysicalEntity extends PhysicalEntity {

    public WallPhysicalEntity() {
        
        SkeletonLogger.logCall();
		
	SkeletonLogger.logReturn();
    }

	/**
	 * 
	 * @param c
	 */

    public void collision(PhysicalEntity c)
        {
            
                //Kimenet
                
    
                //Ha felulrol jott bele a falba
                if(Float.compare(c.getVelocity().getY(), 0.0f) < 0)
                    {
                        
                             //Fal legfelso pontjanak meghatarozasa
                            float MaxY = 0.0f;

                            for(int i = 0; i < polygon.getVertexes().size();i++)
                                {
                                    if(Float.compare(polygon.getVertexes().get(i).getY(),MaxY) > 0)
                                        MaxY = polygon.getVertexes().get(i).getY();
                                }

                            //Objektum kihelyezese a falbol
                            Vector newPosition = new Vector();
                                    newPosition.setX(c.getPosition().getX());
                                    newPosition.setY(MaxY + 3); //Tudom hogy 6 a magassaga mainek 3 a fele, egyebkent ezt az erteket meg kene hatarozni!

                            c.setPosition(newPosition);

                            //Objektum beerkezesi iranyu sebessegenek nulldazasa.
                            Vector newVelocity = new Vector();
                                newVelocity.setX(c.getVelocity().getX());
                                newVelocity.setY(0.0f);

                            c.setVelocity(newVelocity);
                            
                            //Ujra ugorhat
                            c.setJumping(false);
                    }
                else if(Float.compare(c.getVelocity().getX(), 0.0f) > 0) //Ha balrol jott bele a falba Eloszor mar a padloval kellett utkoznie, mert mindig a padlo fal van eloszor letrehozva.
                    {
                            //Fal legfelso pontjanak meghatarozasa
                            float MinX = 1000.0f;

                            for(int i = 0; i < polygon.getVertexes().size();i++)
                                {
                                    if(Float.compare(polygon.getVertexes().get(i).getX(),MinX) < 0)
                                        MinX = polygon.getVertexes().get(i).getX();
                                }

                            //Objektum kihelyezese a falbol
                            Vector newPosition = new Vector();
                                    newPosition.setX(MinX - 1); //Tudom hogy 2 a szelesseg, es annak egy a fele, de amugy ezt ki kene szamolni
                                    newPosition.setY(c.getPosition().getY());
                            c.setPosition(newPosition);

                            //Objektum beerkezesi iranyu sebessegenek nullazasa.
                            Vector newVelocity = new Vector();
                                newVelocity.setX(0.0f);
                                newVelocity.setY(c.getVelocity().getY());

                            c.setVelocity(newVelocity); 
                    }
               else if(Float.compare(c.getVelocity().getX(), 0.0f) < 0) //Ha jobbrol jott bele a falba Eloszor mar a padloval kellett utkoznie, mert mindig a padlo fal van eloszor letrehozva.
                    {
                            //Fal legfelso pontjanak meghatarozasa
                            float MaxX = 0.0f;

                            for(int i = 0; i < polygon.getVertexes().size();i++)
                                {
                                    if(Float.compare(polygon.getVertexes().get(i).getX(),MaxX) > 0)
                                        MaxX = polygon.getVertexes().get(i).getX();
                                }

                            //Objektum kihelyezese a falbol
                            Vector newPosition = new Vector();
                                    newPosition.setX(MaxX + 1); //Tudom hogy 2 a szelesseg, es annak egy a fele, de amugy ezt ki kene szamolni
                                    newPosition.setY(c.getPosition().getY());
                            c.setPosition(newPosition);

                            //Objektum beerkezesi iranyu sebessegenek nullazasa.
                            Vector newVelocity = new Vector();
                                newVelocity.setX(0.0f);
                                newVelocity.setY(c.getVelocity().getY());

                            c.setVelocity(newVelocity); 
                    }
        }
    
    
    
    /*
	public void collision(PhysicalEntity c) {
            
                //Kimenet
                Controller.println("ESEMENY: utkozes fallal");
            
                //csucsok kovetkezo sorrendben vannak megadva teglalapnal:
                //  1-------4
                //  |       |
                //  |       |
                //  2-------3

                // A teglalap a kovetkezo esetekben nem utkozik a korulotte levokkel:
                //   ------------
                //  |   |    |   |
                //   ------------
                //  |   | A  |   |
                //   ------------
                //  |   |    |   |
                //   ------------
                //  A.right < masik.left || A.left > masik.right || A.top < masik.bottom || A.bottom > masik.top

                        //entitás sebességvektorabol origoba eltolt egysegvektor eloallitasa
                        Vector UnityVector = new Vector(c.getVelocity().getX(),c.getVelocity().getY()); //új vektorba belemásoljuk a sebességvektort
                        UnityVector.UnitVector();  //egysegektorat vesszuk

                        //kiszamoljuk az entitas szelesseget es magassagat
                        float EntityHeight = c.getPolygon().getVertexes().get(0).getY()-c.getPolygon().getVertexes().get(1).getY();
                        float EntityWidth  = c.getPolygon().getVertexes().get(3).getX()-c.getPolygon().getVertexes().get(0).getX();


                        //megnézzük honnan erkezett az entitas
                        if(UnityVector.getX()<0)    //ha jobbrol ment bele a falba, tehat balra ment
                            {
                                System.err.println("Event");
                            
                                //akkor fal jobb felevel utkozott, kitesszuk jobbra tole
                                c.setPosition(new Vector(polygon.getVertexes().get(2).getX() + EntityWidth/2.0f,c.getPosition().getY()));

                                //sebessegvektor oldaliranyu komponeneset nullazzuk
                                c.addVelocity(new Vector(-1.0f*c.getVelocity().getX(),c.getVelocity().getY()));

                            }
                        if(UnityVector.getX()>=0)    //ha balrol ment bele a falba, tehat jobra ment
                            {
                                System.err.println("Event");
                            
                                //akkor fal bal felevel utkozott, kitesszuk balra tole
                                c.setPosition(new Vector(polygon.getVertexes().get(0).getX() - EntityWidth/2.0f,c.getPosition().getY()));

                                //sebessegvektor oldaliranyu komponeneset nullazzuk
                               c.addVelocity(new Vector(-1.0f*c.getVelocity().getX(),c.getVelocity().getY()));
                            }
                        if(UnityVector.getY()<0)    //ha fentrolrol ment bele a falba, tehat raesett
                            {
                                System.err.println("Event");
                                
                                //akkor fal jobb tetejevel utkozott, kitesszuk felfele tole
                                c.setPosition(new Vector(c.getPosition().getX(),polygon.getVertexes().get(0).getY() + EntityHeight/2.0f));

                                //sebessegvektor fuggoleges iranyu komponeneset nullazzuk
                                c.setVelocity(new Vector(c.getVelocity().getX(),0.0f));
                            }
                        if(UnityVector.getY()>=0)    //ha alulrol ment bele a falba, tehat felugrott
                            {
                                System.err.println("Event");
                                
                                //akkor fal jobb aljaval utkozott, kitesszuk lefele tole
                                c.setPosition(new Vector(c.getPosition().getX(),polygon.getVertexes().get(1).getY() - EntityHeight/2.0f));

                                //sebessegvektor fuggoleges iranyu komponeneset nullazzuk
                                c.addVelocity(new Vector(c.getVelocity().getX(),-1.0f*c.getVelocity().getY()));
                            }
                }
                * 
                * 
                * 
                */
}